'use strict';

const auth = (config, app) => {
  return async function (ctx, next) {
    console.log(' middleware auth  -->', ctx);
    let token = ctx.request.header.token || null;
    // console.log('ctx header token ', token);
    let cookie = ctx.request.header.cookie || '';
    // console.log('ctx header cookie ', cookie);
    // console.log('ctx header cookie token', cookie.split('token=')[1]);
    if (!token) {
      token = cookie.split('token=')[1] || '';
      console.log('token 1111 ', token);
      token = token.split(';')[0];
    }
    console.log('token 2222 ', token);
    // await next();
    // code 0-无 1-超时 2-假得
    if (token) {
      // 校验token
      const res = await ctx.helper.getToken(token, config.JWT_CONFIG.key);

      // console.log("token 获取到的信息", res);
      // 超时了 不能重新刷接口，需要再页面请求中调用更新auth时间
      if (res === 'TokenExpiredError') {
        ctx.body = {
          code: 403,
          msg: '超时了',
        };
      } else if (res === 'JsonWebTokenError') {
        // token假的
        ctx.body = {
          code: 403,
          msg: '身份认证失败',
        };
      } else if (Object.keys(res).length > 0) {
        // 通过验证
        ctx.locals.username = res.username;
        ctx.locals.phone = res.phone;
        ctx.locals.id = res.id;
        ctx.locals.user = res;
        console.log('-- ctx.locals user -- 通过验证 ');
        console.log(ctx.locals);
        await next();
      }
    } else {
      // token缺失
      ctx.body = {
        code: 403,
        msg: '请登录 token缺失',
      };
    }
  };
};

module.exports = auth;
